package Task;

/**
 * volatile关键字
 * 该关键字用于修饰一个属性，保证并发安全问题，基本上用于基本类型的属性使用
 */
public class VolatileDemo {
    /*
        volatile用于让多线程在多个CPU执行时轻质访问内存中的a。
        而不能每个CPU都复制到缓存中执行，否则会出现并发修改不可见的情况导致并发安全问题。
     */
//    private  int a =1;
    private volatile int a =1;
    public static void main(String[] args) {
        VolatileDemo demo =new VolatileDemo();
        Thread t = new Thread(){
            @Override
            public void run() {
                int b = 1;
                System.out.println("线程开始了");
                while(demo.a==1){
                    b++;
                }
                System.out.println("线程结束了！");
            }
        };
        t.start();

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        demo.a=2;
        System.out.println("主线程demo.a的值改为了："+demo.a);


    }
}
